/**
 * 判断是否是对象或数组
 * @param {object} obj
 */
function isObjet(obj) {
  return typeof obj === "object" && obj !== null;
}
/**
 * 深度比较
 * @param {object} obj1
 * @param {object} obj2
 * @returns {boolean}
 */
function isEqual(obj1, obj2) {
  if (!isObjet(obj1) || !isObjet(obj2)) {
    return obj1 === obj2; // 判断值类型
  }
  // 强判断
  if (obj1 === obj2) {
    return true;
  }
  // 浅层比较
  const obj1Keys = Object.keys(obj1);
  const obj2Keys = Object.keys(obj2);
  if (obj1Keys.length !== obj2Keys.length) {
    return false;
  }
  // 深度比较
  for (let key in obj1) {
    // 递归比较
    const res = isEqual(obj1[key], obj2[key]);
    if (!res) {
      return false;
    }
  }
  // 全相等
  return true;
}

// 测试
const demo1 = { name: "zhangsan" };
const demo2 = [0, 1, 2];
console.log(isEqual(demo1, demo2));
